package com.hospital.register.core.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.hospital.register.common.exception.BusinessException;
import com.hospital.register.dto.core.admin.HospitalSetQueryDto;
import com.hospital.register.model.core.HospitalSet;
import com.hospital.register.vo.core.admin.HospitalSetPageVo;
import com.hospital.register.vo.core.api.HospitalSignVo;
import org.apache.ibatis.annotations.Param;

import javax.servlet.http.HttpServletRequest;
import java.util.List;

/**
 * 处理医院设置相关业务
 *
 * @author 刘逸晖
 */
public interface HospitalSetService {

    /**
     * 查询所有医院设置
     *
     * @return 医院设置列表
     */
    List<HospitalSet> selectAll();

    /**
     * 根据 id 删除医院设置
     *
     * @param id id
     * @return 是否删除成功
     */
    boolean deleteById(Long id);

    /**
     * 分页查询医院设置
     *
     * @param page       分页条件
     * @param conditions 查询条件
     * @return 医院设置列表
     */
    Page<HospitalSetPageVo> selectPage(Page<HospitalSetPageVo> page, @Param("conditions") HospitalSetQueryDto conditions);

    /**
     * 新增医院设置
     *
     * @param hospitalSet 新增数据
     * @return 是否新增成功
     */
    boolean insert(HospitalSet hospitalSet);

    /**
     * 根据 id 查询医院设置
     *
     * @param id id
     * @return 医院设置
     */
    HospitalSet selectById(Long id);

    /**
     * 根据 id 更新医院设置
     * 创建时间、删除标志不可更新
     *
     * @param hospitalSet id 极其新数据
     * @return 是否更新成功
     */
    boolean updateById(HospitalSet hospitalSet);

    /**
     * 根据 id 列表批量删除医院设置
     *
     * @param idList id 列表
     * @return 是否删除成功
     */
    boolean deleteByIdList(List<Long> idList);

    /**
     * 根据 id 更新医院设置的状态
     *
     * @param id     id
     * @param status 状态
     * @return 是否更新成功
     */
    boolean updateStatusById(Long id, Byte status);

    /**
     * 根据医院编号查询签名秘钥
     *
     * @param hoscode 医院编号
     * @return 签名秘钥
     */
    String selectSignKeyByCode(String hoscode);

    /**
     * 校验签名
     *
     * @param hoscode 医院的编码
     * @param signKey 用户输入的签名（MD5加密）
     * @param request http 请求
     * @throws BusinessException 校验失败
     */
    void checkSignKey(String hoscode, String signKey, HttpServletRequest request) throws BusinessException;

    /**
     * 根据医院编号查询签名信息
     * @param hoscode 医院编号
     * @return 签名和 url ……
     */
    HospitalSignVo selectSignByCode(String hoscode);

}
